package cn.kgc.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

/**
 * @author: mosin
 * @version: v1.0  2022/10/26
 *  会话对象  session   浏览器和后台服务器建立数据连接 则开启一次会话
 *
 *  如何区分会话    不同请求是否属于同一次会话   Cookie   标识会话的状态
 *  服务器在作出响应时  会创建一个cookie对象   并且设置cookie的值   key   JSESSIONID   value  569278A01F12B4B36A2E9C85C795F79A
 *  JSESSIONID=  569278A01F12B4B36A2E9C85C795F79A （session id）

 *  1. 从浏览器 向服务器发送第一次请求  在请求头中 不会携带 cookie
 *
 *  2. 服务器接收请求之后 解析请求对象   查看请求中是否有一个 key为 JSESSIONID  cookie
 *  3. 否 JSESSIONID的cookie  那么表示当前请求时第一次请求    服务会创建一个会话对象 session
 *  4. 服务器在作出响应时  会创建一个cookie对象  然后设置cookie对象的值  JSESSIONID=  session id
 *  5. 将创建好的cookie跟随响应对象 响应给前端浏览器
 *
 *  6. 浏览器再次发送请求时 会携带第一次请求时服务器响应回来的cookie
 *  7. 服务器接收请求之后 解析请求对象   查看请求中是否有一个 key为 JSESSIONID
 *  8. 是  说明这次请求不是第一次请求   不会在创建新的会话对象（session没有被销毁的前提下）
 *
 */
@WebServlet({"/hello","/hello2"})
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        HttpSession session = req.getSession();
        //获取session id  session的唯一标识
        String id = session.getId();
        System.out.println("session id = " + id);
        System.out.println("请求被接收");

        // 自定义 cookie
        Cookie cookie = new Cookie("username", "admin");
        // 给响应对象绑定cookie
        resp.addCookie(cookie);
        resp.sendRedirect(req.getContextPath()+"/hello.jsp");
    }
}
